// ES5
// function Point(x, y) {
//   this.x = x
//   this.y = y
// }

// Point.prototype.getPositon = function () {
//   return '黑恶' + this.x + '嘿嘿' + this.y + ''
// }

// const point = new Point('1', '2')
// console.log(point)

// console.log(point.getPositon())
// ES6

// class Ponit {
//   constructor(x, y) {
//     this.x = x
//     this.y = y
//   }
//   getPoint() {
//     return `${this.x}+++++++++${this.y}`
//   }
// }

// const point = new Ponit(2222, 444)
// console.log(point)

// console.log(point.getPoint())

// const userinfo = {
//   _age: 18,
//   get age() {
//     console.log('你想知道我的年龄?')
//     return this._age
//   },
//   set age(value) {
//     if (value > 18) {
//       console.log('太老了')
//     } else {
//       console.log('太年龄')
//     }
//   },
// }

// console.log(userinfo.age)
// userinfo.age = 222

// class Age {
//   constructor(_age) {
//     this._age = _age
//   }
//   get age() {
//     console.log('嘿嘿')
//     return this._age
//   }
//   set age(value) {
//     console.log('哈哈')
//     this._age = value
//   }
// }

// const xiaomingage = new Age(19)
// console.log(xiaomingage)

// console.log(xiaomingage.age)
// xiaomingage.age = 25

// 类的另外一种定义方式
// const Age = class {
//   constructor(age) {
//     this.age = age
//   }
// }

// const age = new Age('222222')

// // 静态属性和静态方法
// class Person {
//   static name = 'a'
//   static getPerson() {
//     return Person.name
//   }
// }
// console.log(Person)
// console.log(Person.getPerson())

// 类的初始值
// class Person {
//   name = 11
//   constructor(age) {
//     this.age = age
//   }
// }

// console.log(new Person(22222))

// 私有方法
// const _func2 = () => {
//   console.log(1111)
// }

// class Point {
//   func1() {
//     _func2.call(this)
//   }
// }

// const p = new Point()
// console.log(p)
// p.func1()

// const func1 = Symbol('func1')

// class Point {
//   static [func1]() {}
// }

// 私有属性用#表示
// class Point {
//   #name = 10
//   constructor(name) {}
// }

// console.log(new Point())

// function Point() {
//   console.log(new.target)
// }

// new Point()
// Point()

// class Ponit {
//   constructor() {
//     console.log(new.target)
//   }
// }

// new Ponit()

// class Parent {
//   constructor() {
//     console.log(new.target)
//   }
// }

// class Child extends Parent {
//   constructor() {
//     super()
//   }
// }

// new Parent()

// new Child()
